Основой любого объекта является интерфейс IUnknown. Этот интерфейс используется для:
Реализация интерфейса IUnknown превращает объект в объект COM. Реализуется этот интерфейс по определенным правилам. Для его реализации необходимо, чтобы класс унаследовал этот абстрактный интерфейс и реализовал его методы. Наследование производится так.
#include "stdafx.h"
#include "ole2.h"
class COleTestAbstract
{
public:
virtual void Msg()=0;
};
class COAbsatract : public COleTestAbstract, public IUnknown
{
public:
void Msg();
};
У данного интрефейса есть три метода.
Каждый объект читает количество ссылок на себя. Для этого в классе необходимо завести переменную, в которой будет храниться количество обращений. Обычно это переменная типа ULONG хотя можно использовать и int. При объявлении методов используются определения STDMETHOD или STDMETHOD_, чем они отличаются ??? Первое объявление всегда возвращает HRESULT, а второе в зависимости от первого указанного типа.
STDMETHOD (QueryInterface) // вернет HRESULT STDMETHOD_ (ULONG, AddRef) // вернет ULONG
IUnknown является главным интерфейсом. Через него производится доступ к другим интерфейсам. Ну типо того, что Вы спрашиваете у объекта умеет ли он делать это, а в ответ объект возврашает вам либо ошибку либо указатель на метод.